<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="referrer" content="never">
    <title>递归函数</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
    </style>
</head>
<body>
    
    <script type="text/javascript">
        /* 
        在函数中调用自身的函数，称为递归函数。需要跳出条件
            找规律 -> 写返回值 -> 跳出条件

            尾调用：递归函数的结果是另一个函数的调用，而不是等待另一个函数调用的结果
            优化：节省内存，快速计算结果
        */

        // n! = n * n-1!  5! = 5*4*3*2*1 
        function jc(n){
            if(n == 1){
                return 1;
            }
            return n * jc(n-1);
        }

        function jcWei(n, result = 1){
            if(n == 1){
                return result;
            }
            return jcWei(n-1, result * n);
        }

        console.log(jcWei(5)); // 120


        // n = n-1 + n-2
        function fb(n){
            if(n == 1 || n == 2){
                return 1;
            }
            return fb(n-1) + fb(n-2);
        }
    </script>
</body>
</html>